package jangdolbaeng2.seller.action;

import jangdolbaeng2.seller.dao.BoardDAO;
import jangdolbaeng2.tools.PageNavigator;
import jangdolbaeng2.vo.Qa_commentVO;
import jangdolbaeng2.vo.ShopVO;
import jangdolbaeng2.vo.Shop_qaVO;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.struts2.dispatcher.SessionMap;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

public class qaAction extends ActionSupport implements SessionAware{
	
	private SessionMap<String, Object> sessionMap; // session
	
	private ShopVO shop;							// 상점 정보
	private List<HashMap<String,Object>> blogList;	// 상점 블로그 목록 정보
	private String category;						// 카테고리 
	
	private Shop_qaVO shop_qa;				//게시글 정보
	private int qa_seq;						//게시글 보기, 삭제시 글번호
	
	private int cmt_seq;					//삭제시 리플 번호
	private int shop_seq;					//가게번호	
	
	private Qa_commentVO reply;				//답글 객체
	private List<Qa_commentVO> replylist;	//답글 리스트
	private String cmt_contents;			//내용
	
	
	
	private int spamCheck;					//스팸 체크 여부
	private List<Shop_qaVO> shop_qa_list;	//게시물 목록
	PageNavigator pagenavi;					//페이징 관련 정보
	int currentPage = 1;					//게시물 목록의 현재 페이지
	String searchText;						//검색어
	
	private int insertResult =0; 			// 입력 여부 기본값 0
	
	private String customer_id;				//사용자 아이디
	private String seller_id;
	
	
	// 금칙어 체크 작성자 : 진승민
	public String spamCheck() {
		/*System.out.println("스팸체크 시작");*/
		BoardDAO dao = new BoardDAO();
		Shop_qaVO spamTest = new Shop_qaVO();
		shop_seq = (int)sessionMap.get("current_shop_seq");
		// spamTest에 정보 입력
		spamTest.setShop_seq(shop_seq); 
		spamTest.setQa_title(searchText);
		
		// dao spam 처리 요청
		spamCheck = dao.spamWords(spamTest);
		/*System.out.println("spamCheck: "+spamCheck);*/
		return SUCCESS;		
	}
	
	// 신규 게시물 저장 작성자: 김기석
	public String insertBoard() throws Exception {
		//세션으로부터 로그인한 ID 읽어서 board객체에 저장

		//by 기석
		//System.out.println("인서트 보드 시작");
		
		
		shop_qa.setCustomer_id((String) sessionMap.get("customer_id"));
		shop_qa.setShop_seq((int)sessionMap.get("current_shop_seq"));
		
		
		System.out.println("insertBoard, shop_qa="+shop_qa);

		BoardDAO dao = new BoardDAO();
		insertResult = dao.insertBoard(shop_qa);
		/*System.out.println("입력결과:"+insertResult);*/
		return SUCCESS;
	}

	//게시판 글목록 보기 작성자:김기석
	public String listBoard() throws Exception {
		//페이지 당 보여줄 게시물 수 지정
		int countPerPage = 5;
		int pagePerGroup = 5;
		BoardDAO dao = new BoardDAO();

		//현재 가게 번호 적용
		shop_seq = (int)sessionMap.get("current_shop_seq");
		
		//전체 글수 구하기
		int total = dao.getTotal(searchText,shop_seq);
		
		
		//PageNavigator 객체 생성 (페이지당 글수, 그룹당 페이지 수, 현재 페이지, 전체 글수)
		pagenavi = new PageNavigator(countPerPage, pagePerGroup, currentPage, total);
		
		//현재 페이지에 해당하는 글 목록 읽기 (전체 레코드 중 보여줄 첫번째 글의 위치, 페이지당 글 수 )
		shop_qa_list = dao.listBoard(searchText, pagenavi.getStartRecord(), pagenavi.getCountPerPage(), shop_seq);

	
		return SUCCESS;

	}

	//글 읽기 작성자:김기석
	public String readBoard() throws Exception {
		//전달된 글번호로 검색.
		BoardDAO dao = new BoardDAO();
		shop_qa = dao.getBoard(qa_seq);
		System.out.println(shop_seq);
		System.out.println("readBoard // jsp 직전 shop_qa: "+shop_qa);
		
		
		//해당 글의 리플목록 읽기
		replylist = dao.listReply(qa_seq);

		return SUCCESS;
	}

	
	//글 삭제 작성자:김기석
	public String deleteBoard() throws Exception {
		BoardDAO dao = new BoardDAO();
		
		shop_qa = dao.getBoard(qa_seq);	//해당 번호의 글 정보 읽기		
		dao.deleteBoard(qa_seq);			//본문 글정보 삭제
		return SUCCESS;
	}
	
	//글 수정 폼으로
	public String editForm() throws Exception {
		
		
		String customer_id = (String) sessionMap.get("customer_id");

		shop_qa = new BoardDAO().getBoard(qa_seq);
		
		if (customer_id.equals(shop_qa.getCustomer_id())) return SUCCESS;	//본인 글이면
		else return INPUT;		//본인글이 아니면
		
		}
	
	//글 수정 처리
	public String editBoard() throws Exception {
		BoardDAO dao = new BoardDAO();
		System.out.println("글수정처리: "+shop_qa);
		
		dao.updateBoard(shop_qa);		//파일정보 수정

		//수정된 글 읽기로 돌아가기 위해
		qa_seq = shop_qa.getQa_seq();
		return SUCCESS;
	}
	
	//------------------- 답글 관련 ----------------------------//
	//리플 가져오기
	public String replyList() throws Exception {
		System.out.println("리플 가져오기 액션 시작, qa_seq= "+qa_seq);
		BoardDAO dao = new BoardDAO();
		replylist = dao.listReply(qa_seq);
		return SUCCESS;
	}
	
	//리플 달기
	public String insertReply() throws Exception {
		System.out.println("insertReply 액션 시작");	
		System.out.println(qa_seq+","+cmt_contents);
		reply = new Qa_commentVO();
		reply.setQa_seq(qa_seq);
		reply.setCmt_contents(cmt_contents);
		reply.setCmt_writer((String) sessionMap.get("seller_id"));
		System.out.println(reply);
		//DAO로 reply객체를 전달하여 DB에 저장
		new BoardDAO().insertReply(reply);
		
		qa_seq = reply.getQa_seq();		//되돌아갈 본문 글 번호
		return SUCCESS;
	}
	
	//리플 삭제
	public String deleteReply() throws Exception {
		System.out.println("deleteReply 액션 시작");
		String seller_id = (String) sessionMap.get("seller_id");
		
		//DAO로 리플 번호와 로그인 아이디를 전달하여 리플 삭제
		new BoardDAO().deleteReply(cmt_seq, seller_id);
		return SUCCESS;
	}
	
	//답글 수정
	//답글을 달아주는 개체를 세션에서의 상점ID로 넣어줘야 합니다.
	public String updateReply() throws Exception {
	
		//세션 ID 읽기
		customer_id = (String) sessionMap.get("customer_id");
		
		reply.setCmt_writer((String) sessionMap.get("seller_id"));
	
		//DAO로 reply객체를 전달하여 DB에서 수정
		new BoardDAO().updateReply(reply);
		qa_seq = reply.getQa_seq();		//되돌아갈 본문 글 번호

		return SUCCESS;
	}


	
	
	public String getCmt_contents() {
		return cmt_contents;
	}

	public void setCmt_contents(String cmt_contents) {
		this.cmt_contents = cmt_contents;
	}

	public String getSeller_id() {
		return seller_id;
	}

	public void setSeller_id(String seller_id) {
		this.seller_id = seller_id;
	}

	public List<Qa_commentVO> getReplylist() {
		return replylist;
	}

	public void setReplylist(List<Qa_commentVO> replylist) {
		this.replylist = replylist;
	}

	public String getCustomer_id() {
		return customer_id;
	}

	public void setCustomer_id(String customer_id) {
		this.customer_id = customer_id;
	}

	public SessionMap<String, Object> getSessionMap() {
		return sessionMap;
	}

	public void setSessionMap(SessionMap<String, Object> sessionMap) {
		this.sessionMap = sessionMap;
	}

	public int getQa_seq() {
		return qa_seq;
	}

	public void setQa_seq(int qa_seq) {
		this.qa_seq = qa_seq;
	}

	public int getCmt_seq() {
		return cmt_seq;
	}

	public void setCmt_seq(int cmt_seq) {
		this.cmt_seq = cmt_seq;
	}

	public Qa_commentVO getReply() {
		return reply;
	}

	public void setReply(Qa_commentVO reply) {
		this.reply = reply;
	}

	public int getShop_seq() {
		return shop_seq;
	}

	public void setShop_seq(int shop_seq) {
		this.shop_seq = shop_seq;
	}
	
	public Shop_qaVO getShop_qa() {
		return shop_qa;
	}

	public void setShop_qa(Shop_qaVO shop_qa) {
		this.shop_qa = shop_qa;
	}


	public List<Shop_qaVO> getShop_qa_list() {
		return shop_qa_list;
	}

	public void setShop_qa_list(List<Shop_qaVO> shop_qa_list) {
		this.shop_qa_list = shop_qa_list;
	}

	public PageNavigator getPagenavi() {
		return pagenavi;
	}

	public void setPagenavi(PageNavigator pagenavi) {
		this.pagenavi = pagenavi;
	}

	public int getCurrentPage() {
		return currentPage;
	}

	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}

	public String getSearchText() {
		return searchText;
	}

	public void setSearchText(String searchText) {
		this.searchText = searchText;
	}

	public int getSpamCheck() {
		return spamCheck;
	}

	public void setSpamCheck(int spamCheck) {
		this.spamCheck = spamCheck;
	}


	public int getInsertResult() {
		return insertResult;
	}

	public void setInsertResult(int insertResult) {
		this.insertResult = insertResult;
	}	

	public String getCategory() {
		return category;
	}


	public void setCategory(String category) {
		this.category = category;
	}


	public ShopVO getShop() {
		return shop;
	}


	public void setShop(ShopVO shop) {
		this.shop = shop;
	}
	
	public List<HashMap<String, Object>> getBlogList() {
		return blogList;
	}

	public void setBlogList(List<HashMap<String, Object>> blogList) {
		this.blogList = blogList;
	}

	@Override
	public void setSession(Map<String, Object> arg0) {
		 sessionMap =(SessionMap<String, Object>) arg0;	
	}
	
	
	
}
